互联网与家庭网络的区别
互联网是一个遍布世界的巨大而复杂的系统
,
但其基本工作方式却出奇地简单。
和家庭
、
公司网络一样
,
互联网也是通过路由器来转发包的
, 而且路由器的基本结构和工作方式也并没有什么不同(如
图
)。
因此
,
我们可以将互联网理解为家庭、
公司网络的一个放大版
。
当然,互联网也有一些和家庭、公司网络不同的地方,其中之一就是与转发设备间的距离
。
在家庭
、
公司网络中
,与转发设备之间的距离不过几十米到几百米,
在这种情况下
,
只要延长以太网线就可以到达相邻的转发设备了
。
然而
,
互联网可不能这么搞
,
因为你家到最近的电话局至少也有几公里的距离,
而从日本连接到美国甚至要跨越太平洋
,
用以太网线是无法实现这种连接的。
除了距离之外,路由器在如何控制包的转发目标上也不一样
。
尽管从基本原理来看,
互联网也是根据路由表中的记录来判断转发目标的
,
但路由表记录的维护方式不同
。
互联网中的路由器上有超过
10
万条路由记录,
而且这些记录还在不断变化
,
当出现线路故障时
,
或者新的公司加入互联网时,
都会引发路由的变化
。
人工维护这些路由信息是不现实的,必须实现自动化
。
公司的路由器也有自动维护路由表的机制
,
但出于各种原因,
互联网中采用的机制和公司有所区别
。
距离的不同和路由的维护方式,就是互联网与家庭、公司网络之间最主要的两个不同点
用户接入互联网:接入网
网络包通过交换机和路由器的转发一步一步地接近它的目的地,
在通过互联网接入路由器之后
,
就进入了互联网
。
刚才讲过,
路由器的转发操作都是相同的,
简单来说,就是根据包 IP 头部中的接收方 IP 地址在路由表的目标地址中进行匹配,找到相应的路由记录后将包转发到这条路由的目标网关
。
不过
,
互联网接入路由器发送网络包的操作和以太网路由器有一点不同,
互联网接入路由器是按照接入网规则来发送包的
。
所谓接入网
,
就是指连接互联网与家庭
、
公司网络的通信线路
。
一般
家用的接入网方式包括
ADSL
B
、
FTTH
C
、
CATV
、
电话线
、
ISDN
等
,
公司
则还可能使用专线
。
接入网的线路有很多种类
,
我们无法探索所有这些线路,
因此下面先介绍一个比较有代表性的例子
——
ADSL
。
ADSL Modem
ADSL
技术使用的接入线路
,
其内部结构如图
所示
,
在这张图中 网络包是从右往左传输的。
用户端路由器
发出的网络包通过
ADSLModem
和电话线到达电话局
,
然后到达
ADSL
的网络运营商
(
即
ISP
,
互联网服务提供商)。
在网络包从用户传输到运营商的过程中
,
会变换几种不同的形态,
整个过程如图
所示。
接入网:
接入网这个词表示的是通信线路的用法,而并不表示通信线路的结构。例
如公司里使用的专线,当它用来连接互联网时就叫作接入网,而用来连接
总公司和分公司时就不叫接入网。此外,接入网这个词也不仅限于互联
网,当使用运营商提供的通信服务时,一般都会将用户与运营商之间的线
路叫作接入网。
ADSL
:
Asymmetric Digital Subscriber Line
,不对称数字用户线。它是一种利用架设在电线杆上的金属电话线来进行高速通信的技术,它的上行方向 (用户到互联网)和下行方向(互联网到用户)的通信速率是不对称的。
ADSL Modem
(也叫路由型
ADSL Modem
),其实就是把路由器和
ADSL Modem 装到一个外壳里而已。
Modem:调制解调器,一般自己家里如果有联网的话都有接触过这个东西。
首先
,
客户端生成的网络包
(
图
①和②
)
先经过集线器和交换机到达互联网接入路由器(
图
③
),
并在此从以太网包中取出
IP
包并判断转发目标(
图
④
)
。
接下来
,
包发送的操作也很类似
。如果互联网接入路由器和 ADSL Modem
之间是通过以太网连接的
,
那么就会按照以太网的规则执行包发送的操作,
发送信号本身的过程跟之前是一样的
, 但以太网的头部会有一些差异。
这部分的具体情况各运营商会有所不同
, 而且还需要一些关于BAS
A
(
位于接入网另一端的包转发设备
)
的知识
,
因此相关的细节我们在探索 BAS
的时候再具体讲解
。
这里大家先记住
,
网络包会加上 MAC
头部
、
PPPoE
头部
、
PPP
B
头部总共
3
种头部
(
图
⑤
),
然后按照以太网规则转换成电信号后被发送出去。
每一个小格子称为一个信元
。
信元是一个非常小的数据块
,
开头是有
5
个字节的头部,
后面是
48
个字节的数据
,
用于一种叫作
ATM
A
的通信技术
。 大家可以将信元理解为一种更小一号的包,
原理上跟
TCP/IP
将应用程序的数据拆分成块装进一个个包的过程是一样的
。 说点题外话,
其实之所以要将包拆分成信元
,
原因是这样的
。
当初开发 ADSL
技术时
,
通信业比较看好
ATM
技术
,
各运营商也在
ATM
相关的 设备上投入了很多资金。
在这样的情况下
,
如果使用信元来传输数据
,
就比较容易和其他设备进行整合,
可以降低开发投入和设备投入
。
如果不是出于这样的原因,
其实并不需要将包拆分成信元
,
实际上也有一些
ADSL 运营商使用的 ADSL Modem
是不进行数据拆分的
。
ATM
:
Asynchronous Transfer Mode
,异步传输。它是在以电话线为载体的传统电话技术基础上扩展出来的一种通信方式。它的数据传输是以“信元”为单位来进行的,这和以包为单位传输数据的 TCP/IP
很像,但这种方式并不适用于计算机通信。
ADSL工作方式
将网络包拆分成信元之后
,
接下来就要将这些信元转换成信号了(上图
⑧
)。
以太网采用的是用方波信号表示 0
和
1
的方式
,
这种方式很简单
,
但同样是将数字信息转换成模拟信号,
ADSL
采用的方法要复杂一些
。
其中有两个原因
,
一个原因是方波信号的波形容易失真,
随着距离的延长错误率也会提高
;
另一个原因是方波信号覆盖了从低频到高频的宽广频段,
信号频率越高
,
辐射出来的电磁噪声就越强,
因此信号频谱太宽就难以控制噪声
。
因此,ADSL Modem 采用了一种用圆滑波形(正弦波)对信号进行合成来表示 0 和 1 的技术,这种技术称为调制
。
调制有很多方式,ADSL 采用的调制方式是振幅调制(ASK)和相位调制(PSK)相结合的正交振幅调制(QAM)方式
。
振幅调制(ASK)
下面先来看一下它的两个组成要素
。
振幅调制是用信号的强弱,也就是信号振幅的大小来对应 0 和 1 的方式
。
如图
(
b
),
振幅小的信号为
0
,
振幅大的信号为
1
,
这是一种最简单的对应关系。
在这个例子中,振幅大小只有两个级别,如果增加振幅变化的级别,就可以对应更多的比特。例如,如果将振幅增加到 4 个级别, 则振幅从小到大可分别对应 00、01、10 和 11,这样就可以表示两个比特了。这样做可以将单位时间内传输的数据量加倍,也就能够提高速率。以此类推,如果振幅有 8 个级别,就可以表示 3 个比特,16 个级别就可以表示 4 个比特,速率也就越来越高。不过,信号会在传输过程中发生衰减,也会受到噪声影响而失真,如果振幅级别太多,接收方对信号的识别就容易出错,因此振幅级别也不能太多。
相位调制(PSK)
另一个组成要素是相位调制,这是一种根据信号的相位来对应 0 和 1 的方式。Modem 产生的信号是以一定周期振动的波,如图所示,振动的起始位置不同,波的形状也就不同。如果将波的一个振动周期理解为一个圆,则起始位置就可以用 0 度到 360 度的角度来表示,这个角度就是相位,用角度来对应 0 和 1 的方式就叫作相位调制。例如,从 0 度开始的波为 0,从 180 度开始的波为 1,这是一种最简单的对应关系,如图(c)所示。和振幅调制一样,相位调制也可以通过将角度划分为更细的级别来增加对应的比特数量,从而提高速率。但是,角度太接近的时候也容易产生误判,因此这样提升速率还是有限度的。
注意:在上图(c)中,在虚线处,波以多少度的角进入,下一个虚线区间就代表其进入角度对应的数字
180度进入,代表1:
0度进入,代表0:
正交振幅调制(QAM)
ADSL 使用的正交振幅调制就是将前面这两种方式组合起来实现的
。 图
(
d
)
就是将图
(
b
)
和图
(
c
)
组合起来的一个例子
,
大家应该一看就明白了。
如果信号的振幅可以表示
1
个比特
,
相位可以表示
1
个比特
, 那么加起来就可以表示 2
个比特
。
因此
,
将两种方式组合起来
,
正交振幅调制就可以用一个波表示更多的比特,
从而提高传输速率
。
正交振幅调制中
,
通过增加振幅和相位的级别
,就可以增加能表示的比特数。
例如
,
如果振幅和相位各自都有
4
个级别
,
那么组合起来就有
16 个级别,
也就可以表示
4
个比特的值
。
当然
,
和单独使用振幅调制或相位调制的情况一样,
级别过多就容易发生误判
,
因此这种方法提升的速率是有限度的。
ADSL使用多个波来提高速率
上面的例子中的信号是一个频率的波,实际上信号不一定要限制在一个频率。不同频率的波可以合成,也可以用滤波器从合成的波中分离出某个特定频率的波。因此,我们可以使用多个频率合成的波来传输信号, 这样一来,能够表示的比特数就可以成倍提高了。 ADSL 就是利用了这一性质,通过多个波增加能表示的比特数来提高速率的。具体来说,如图所示,ADSL 使用间隔为 4.3125 kHz 的上百个不同频率的波进行合成,每个波都采用正交振幅调制,而且,根据噪声等条件的不同,每个波表示的比特数是可变的。也就是说,噪声小的频段可以给波分配更多的比特,噪声大的频段则给波分配较少的比特,每个频段表示的比特数加起来,就决定了整体的传输速率。
ADSL
技术中
,
上行方向(用户到互联网)和下行方向(互联网到用户)的传输速率是不同的
,
原因也在这里
。
如果上行使用
26
个频段
,
下行则可以使用 95
个或者
223
个频段
,
波的数量不同
,
导致了上下行速率不同。 当然,
下行使用的频段较高
,
这些信号容易衰减而且更容易受到噪声的影响,
因此这些频段可能只能表示较少的比特数
,
或者干脆无法传输信号。
距离越远
,
频率越高
,
这种情况也就越显著
,
因此如果你家距离电话局太远,
速率就会下降
。 噪声和衰减等影响线路质量的因素在每条线路上都不同,
而且会随着时间发生变化。
因此
,
ADSL
会持续检查线路质量
,
动态判断使用的频段数量,
以及每个频段分配到的比特数
。
具体来说
,
当
Modem
通电后
,
会发送测试信号,
并根据信号的接收情况判断使用的频段数量和每个频段的比特数,
这个过程称为训练
(
握手
),
需要几秒到几十秒的时间
。
分离器的作用
ADSL Modem
将信元转换为电信号之后
,
信号会进入一个叫作分离器的设备,
然后
ADSL
信号会和电话的语音信号混合起来一起从电话线传输出去。
在信号从用户端发送出去时,电话和 ADSL 信号只是同时流到一条线路上而已,分离器实际上并没有做什么事。 分离器的作用其实在相反的方向,也就是信号从电话线传入的时候
。 这时,
分离器需要负责将电话和
ADSL
的信号进行分离
。
电话线传入的信号是电话的语音信号和 ADSL
信号混合在一起的
,
如果这个混合信号直接进入电话机,
ADSL
信号就会变成噪音
,
导致电话难以听清
。
为了避免这样的问题,
就需要通过分离器将传入的信号分离
,
以确保
ADSL信号不会传入电话机。
具体来说
,
分离器的功能是将一定频率以上的信号过滤掉,
也就是过滤掉了
ADSL
使用的高频信号
,
这样一来
,
只有电话信号才会传入电话机,
但对于另一头的
ADSL Modem
,
则是传输原本的混合信号给它。
ADSL Modem
内部已经具备将
ADSL 频率外的信号过滤掉的功能
,
因此不需要在分离器进行过滤。
大家可能会认为分离器的功能只是过滤掉高频信号,防止 ADSL 对电话产生干扰,而实际上它还可以防止电话对 ADSL 产生干扰
。
如果没有分离器,
拿起电话听筒接通电话的状态
,
和放下听筒挂断电话的状态下
,
信号的传输方式是不同的。
当放下听筒时
,
电话机的电路和电话线是断开的
, 当拿起听筒时电话机就和电话线相连,
电话机的信号就会传到电话线上
。 这两种状态的差异会导致噪声等线路状态的改变,
如果
ADSL
通信过程中拿起话筒导致线路状态改变,
就需要重新训练
(
握手
),
这就会导致几十秒的通信中断,
分离器可以防止发生这样的问题
。
当然,也有一种技术能够快速重新握手,即便没有分离器也不会影响 ADSL 通信,G.992.2 的 ADSL规格就包含这种技术
,
但
ADSL
信号还是会影响电话
,
因此
G.992.2
的ADSL 规格中一般还是需要使用分离器
。
从用户电话机到电话局
从分离器出来
,
就是插电话线的接口
,
信号从这里出来之后
,
会通过室内电话线,
然后到达大楼的
IDF
A
和
MDF
B
,
外面的电话线在这里和大楼内部的室内电话线相连接。
如果是独栋住宅
,
就可以将室外线和室内线直接连起来。
通过配线盘之后
,
信号会到达保安器
。
保安器是为了防止雷电等情况下电话线中产生过大电流的一种保护装置,
内部有保险丝
。接下来,
信号会进入电线杆上架设的电话电缆
。
电话线是一种直径0.32~
0.9 mm
C
的金属信号线
,
这些信号线如图
4.8
所示被捆绑在一起
。
电话电缆在用户住宅附近一般是架设在电线杆上
,
但中途会沿电线杆侧面的金属管进入地下。
由于电话线必须进入很多住宅和大楼
,
所以电话局附近就会集结数量庞大的电缆,
这么多电缆要通过电线杆引入电话局是非常不现实的,
电话局周围得密密麻麻地立满了电线杆
,
而且电线杆上架设过多的电缆,
还会产生防灾方面的问题
。
因此
,
在电话局附近
,
电话线
都是埋在地下的
。
由于电话局附近的地下电缆很多
,集中埋设电缆的地方就形成了一条地道,
这部分称为电缆隧道
(
如照片
)。
通过电缆隧道进入电话局后,
电缆会逐根连接到电话局的
MDF 上。
通过DSLAM到达BAS
DSLAM
:
DSL Access Multiplexer
,数字用户线接入复用设备。它是一种电话局用的多路 ADSL Modem
,可以理解为将多个
ADSL Modem
整合在一个外壳里的设备。
信号通过电话线到达电话局之后
,
会经过配线盘
、
分离器到达
DSLAM
A(上图
⑨
)。
在这里
,
电信号会被还原成数字信息
——
信元
(
图
⑩
)。 DSLAM 通过读取信号波形
,
根据振幅和相位判断对应的比特值
,
将信号还原成数字信息,
这一过程和用户端的
ADSL Modem
在接收数据时的过程是一样的。
因此
,
如果在电话局里安装一大堆和用户端一样的
ADSL Modem,
也可以完成这些工作
,
只不过安装这么多
Modem
需要占用大量的空间,
而且监控起来也非常困难
。
因此,电话局使用了 DSLAM 设备, 它是一种将相当于很多个 ADSL Modem 的功能集中在一个外壳里的设备
。 不过,
DSLAM
和用户端
ADSL Modem
相比还是有一个不同的地方
。 用户端 ADSL Modem
具备以太网接口
,
可以与用户端的路由器和计算机交互,
收发以太网包
,
而
DSLAM
一般不用以太网接口
,
而是用
ATM
接口
,
和后方路由器收发数据时使用的是原始网络包拆分后的
ATM
信元形式
。信元从 DSLAM
出来之后
,
会到达一个叫作
BAS
的包转发设备
。
BAS
和
DSLAM
一样
,
都具有
ATM
接口
,
可以接收
ATM
信元,
还可以将接收到的
ATM
信元还原成原始的包
(
图 11
)。
到这里
, BAS 的接收工作就完成了
,
接下来
,
它会将收到的包前面的
MAC
头部和PPPoE 头部丢弃
,
取出
PPP
头部以及后面的数据
(
图 13
)。
MAC
头部和PPPoE 头部的作用是将包送达
BAS
的接口
,
当接口完成接收工作后
,
它们就完成了使命,
可以被丢弃了
。
具有以太网接口的路由器在接收到包之后也会丢弃其中的 MAC
头部
,
道理是一样的
。
接下来
,
BAS
会在包的前面加上隧道专用头部
,
并发送到隧道的出口
(
图
14
)
。 然后,
网络包会到达隧道出口的隧道专用路由器
(
图15
),
在这里隧道头部会被去掉,
IP
包会被取出
(
图
16
),
并被转发到互联网内部
(
图 17
)。
接入网时使用的PPP和隧道
刚才已经简单讲过
,
用户发送的网络包会通过
ADSL
和
FTTH (光纤)
等接入网到达运营商
的 BAS(Broadband Access Server 宽带接入服务器
)。
互联网本来就是由很多台路由器相互连接组成的,因此原则上应该是将接入网连接到路由器上
。
随着接入网发展到
ADSL
和
FTTH
,
接入网连接的路由器也跟着演进,
而这种进化型的路由器就叫作
BAS
。
下面我们来具体讲一讲。首先是用户认证和配置下发功能。
ADSL 和 FTTH 接入网中,都需要先输入用户名和密码,登录之后才能访问互联网,而 BAS 就是登录操作的窗口。BAS 使用 PPPoE (PPPoE:Point-to-Point Protocol over Ethernet,以太网的点对点协议。)方式来实现这个功能
。
PPPoE
是由传统电话拨号上网上使用的 PPP
协议发展而来的
,
所以我们先来看一看
PPP
拨号上网的工作方式。
ppp工作方式
在使用电话线或者
ISDN
拨号上网时
,
PPP
是如图
这样工作的
。
首先
,用户向运营商的接入点拨打电话(
图
①
-1
),
电话接通后
(
图
①
-2
)输入用户名和密码进行登录操作(
图
②
-2
)。
用户名和密码通过
RADIUS
协议从
RAS
G
发送到认证服务器
,
认证服务器校验这些信息是否正确
。当确认无误后,
认证服务器会返回
IP
地址等配置信息
,
并将这些信息下发给用户 (图
②
-3
)。
用户的计算机根据这些信息配置
IP
地址等参数
,
完成
TCP/IP 收发网络包的准备工作
,
接下来就可以发送
TCP/IP
包了
(
图
③
)。 这个过程的重点在于图
②
-3
下发
TCP/IP
配置信息的步骤
。
在接入互联网时,必须为计算机分配一个公有地址,但这个地址并不是事先确定的。因为在拨号连接时,可以根据电话号码来改变接入点,而不同的接入点具有不同的 IP 地址,因此无法事先在计算机上设置这个地址。所以,在连接时运营商会向计算机下发 TCP/IP 配置信息,其中就包括为计算机分配的公有地址。
RAS
:
Remote Access Server
,远程访问服务器
RADIUS
:
Remote Authentication Dial-in User Service
,远程认证拨号用户服务。
PPP上网的三种方式
ADSL
和
FTTH
接入方式也需要为计算机分配公有地址才能上网
,
这一点和拨号上网是相同的。
不过
,
ADSL
和
FTTH
中
,
用户和 BAS 之间是通过电缆或光纤固定连接在一起的,因此没有必要验证用户身份,所以实际上并不需要 PPP 的所有这些功能
。
然而
,
通过用户名和密码登录的步骤可以根据用户名来切换不同的运营商,
这很方便
。
因此
,
接入运营商在ADSL 和
FTTH
中一般也会使用
PPP
。 不过,
拨号上网的
PPP
是无法直接用于
ADSL
和
FTTH
的
,
要理解这里的原因,
我们先来看看
PPP
协议是如何传输消息的
。 传输 PPP
消息的思路和将
IP
包装入以太网包中传输是一样的
。
PPP
协议中没有定义以太网中的报头和 FCS
等元素
,
也没有定义信号的格式
,
因此无法直接将 PPP
消息转换成信号来发送
。
要传输
PPP
消息
,
必须有另一个包含报头、
FCS
、
信号格式等元素的
“
容器
”,
然后将
PPP
消息装在这个容器里才行。
于是
,
在拨号接入中
PPP
借用了
HDLC
C
协议作为容器
,
而 HDLC 协议原本是为在专线中传输网络包而设计的
,
拨号接入方式对这一规格进行了一些修正。
最终
,
PPP
消息就是像图
(
a
)
这样来进行传输的
。 ’
HDLC
:
High-level Data Link Control
,高级数据联接控制
对于 ADSL 和 FTTH,如果可以和前面一样借用 HDLC 来作为容器,PPP 协议就可以直接使用了
。
但是
,
ADSL
和
FTTH
并不能使用
HDLC
,因此需要寻找另一个机制作为替代。
于是
,
如图
(
b
)
③和图
(
c
) ③所示,
我们用以太网包代替
HDLC
来装载
PPP
协议
。
此外
,
以太网和PPP 在设计上有所不同
,
为了弥补这些问题就重新设计了一个新的规格
, 这就是 PPPoE
。
除PPPoE之外的方式:PPPoA
PPPoA
:
Point-to-Point Protocol over ATM
。
刚才我们讲的内容都是基于
PPPoE
方式的
,
实际的接入网还有其他一些方式,比如PPPoA。
首先,
我们先看看使用
PPPoA
A
方式的
ADSL
接入网
。
ADSL
使用PPPoE 方式时
,
是先将 PPP 消息装入以太网包中,然后再将以太网包拆分并装入信元,而 PPPoA 方式是直接将 PPP 消息装入信元(下图)
。
由于只是开头加不加 MAC
头部和
PPPoE
头部的区别
,
PPP
消息本身是没有区别的,
因此密码校验
、
下发
TCP/IP
配置参数
、
收发数据包等过程都是和PPPoE 基本相同的
。
不过
,
虽然开头加不加
MAC
头部和
PPPoE
头部看上去只是很小的区别,
但却会对用户体验产生一定的影响
。
PPPoA 方式不添加 MAC 头部和 PPPoE 头部,而是直接将包装入信元中。
由于 PPPoA 没有 MAC 头部,所以 PPP 消息是无法通过以太网来传输的,这就意味着需要和 BAS 收发 PPP 消息的设备,也就是计算机和路由器,必须和 ADSL Modem 是一体的,否则 PPP 机制就无法工作了
。
这个一体化的方式主要有以下两种。第一种是将计算机和 ADSL Modem
用
USB
接口连接起来
,
这样ADSL Modem 就和计算机成为一体了
。
不过
,
这种方式最终并没有普及。
另一种方式是像下图
所示的这样
,
将
ADSL Modem
和路由器整合成一台设备。
这种方式和
PPPoE
中使用路由器上网的方式基本没什么区别
,
因此得到了广泛的普及。
不过
,
正如我们刚才提到的
,
当由于地址转换产生问题时,
这种方式就不容易处理了
,
因为我们无法抛开路由器用计算机直接上网。
当然
,
PPPoA
和
PPPoE
相比也有一些优势
。
PPPoE
方式中
,
需要添加
PPPoE
头部和
PPP
头部
,
这意味着
MTU(最大传输单元)
就相应变小了
, 这可能会降低网络的效率。
而
PPPoA
不使用以太网包来传输
PPP
消息
,因此不会发生 MTU
变小的问题
。 PPPoE 会降低网络效率
,
PPPoA
也有
ADSL Modem
和路由器无法分
离的限制
,
这两个问题其实都是由
PPP
引起的
。
因此
,有一些运营商不使用 PPP
,
他们使用
DHCP
协议从
BAS
向用户端下发
TCP/IP
配置信息
。 DHCP 经常用于通过公司网络向客户端计算机下发
TCP/IP
配置信息
, 其原理如图
所示
,
首先客户端请求配置信息
(
图
①
),
然后
DHCP服务器下发配置信息(
图
②
),
非常简单
,
不需要像
PPP
那样需要多个步骤,
也不需要验证用户名和密码
。
没有用户名和密码
,
就意味着无法通过用户名来切换运营商网络,
但这种方式也有优势
,
它可以单纯地直
接传输以太网包
,
不需要添加额外的
PPP
头部
,
因此不会占用
MTU。此外,
采用
DHCP
的运营商使用的
ADSL Modem
也和
PPPoE
、
PPPoA方式不同,
这种
ADSL Modem
不使用信元
,
而是直接将以太网包调制成ADSL 信号
,
因此没有
ADSL Modem
和路由器无法分离的问题
。
通过隧道将网络包发给运营商
BAS 除了作为用户认证的窗口之外,还可以使用隧道方式来传输网络包。所谓隧道,就类似于套接字之间建立的 TCP 连接
。
在
TCP
连接中
, 我们从一侧的出口(
套接字
)
放入数据
,
数据就会原封不动地从另一个出口出来,
隧道也是如此
。
也就是说
,
我们将包含头部在内的整个包从隧道的一头扔进去,
这个包就会原封不动地从隧道的另一头出来
,
就好像在网络中挖了一条地道,
网络包从这个地道里穿过去一样
。 像这样,
如果在
BAS
和运营商路由器之间的
ADSL/FTTH
接入服务商的网络中建立一条隧道,
将用户到
BAS
的接入网连接起来
,
就形成了一条从用户一直到运营商路由器的通道,
网络包通过这条通道
,
就可以进入互联网内部了,
这样的机制就类似于将接入网一直延伸到运营商路由器
。 隧道有几种实现方式,
刚才提到的
TCP
连接就是其中一种实现方式 (图
(
a
))。
这种方式中,首先需要在网络上的两台隧道路由器之间建立 TCP 连接,然后将连接两端的套接字当作是路由器的端口,并从这个端口来收发数据。换句话说,在路由器收发包时,是基于隧道的规则向隧道中放入或取出网络包,这时,TCP 连接就好像变成了一根网线,包从这里穿过到达另一端。图(b)中还介绍了另一种基于封装(encapsulation)的隧道实现方式,这种方式是将包含头部在内的整个包装入另一个包中传输到隧道的另一端。在这种方式中,包本身可以原封不动地到达另一端的出口,从结果上看和基于 TCP 连接的方式是一样的,都实现了一个可供包进行穿梭的通道。 通过前面的介绍大家可以发现,无论任何机制,只要能够将包原封不动搬运到另一端,从原理上看就都可以用来建立隧道。
用户接入互联网的步骤纵览
理解了 PPPoE 和隧道的原理之后,下面来看看接入网的整体工作过程。
1)接入网的工作从用户端的互联网接入路由器进行连接操作开始
首先, 接入路由器中需要配置运营商分配的用户名和密码 。然后,接入路由器会根据 PPPoE 的发现机制来寻找 BAS。这一机制和 ARP 一样是基于广播来实现的,过程如下,很简单。 用户询问:“BAS 在不在?在的话请报告 MAC 地址。” BAS 回答:“我在这里,我的 MAC 地址是 xx:xx:xx:xx:xx:xx。” 这样用户端就知道了 BAS 的 MAC 地址,也就可以和 BAS 进行通信了。大家可以认为前面这个过程相当于拨号上网中拨通电话的动作。 互联网接入路由器通过 PPPoE 的发现机制查询 BAS 的 MAC 地址。
2)接下来,进入用户认证和下发配置的阶段
这里的工作过程有点复杂,我们只说重点。第一个重点是用户名和密码如何发送给 BAS。这里有两种方式,一种是将密码进行加密的 CHAPB 方式,另一种是不加密的 PAPC 方式,在互联网接入路由器的设置画面中可以选择。进行加密的 CHAP 方式显然安全性更高,一般也推荐使用这种方式,但也并不是说使用不加密的 PAP 方式密码就立刻会被窃取。由于明文密码只在 BAS 和用户端路由器之间传输 ,所以如果要窃取密码,要么在路由器和 ADSL Modem 中间进行窃听,要么爬到电线杆上安装窃听装置拾取电缆中泄漏的电磁波。不过,光纤是不会泄漏电磁波的,因此无法通过第二种方式进行窃听。
第二个重点是,在校验密码之后 BAS 如何向用户下发 TCP/IP 配置信息。这里下发的配置信息包括分配给上网设备的 IP 地址 、DNS 服务器的IP 地址以及默认网关的 IP 地址。当使用路由器连接互联网时,路由器会根据这些信息配置自身的参数。这样一来,路由器的 BAS 端的端口就有了公有地址,路由表中也配置好了默认网关,接下来就可以将包转发到互联网中了。接下来,客户端就会开始发送用来访问互联网的网络包,比如有人在浏览器里输入了一个网址,这时网络包就开始发送了。这些包的目的地是互联网中的某个地方,这个地方或许在互联网接入路由器的路由表里是找不到的。这时,路由器会选择默认路由,并将这个包转发给默认路由的网关地址,也就是 BAS 下发的默认路由。这里的操作过程和路由器转发包的过程相同 ,只不过在通过路由表判断转发目标之后,包不是按照以太网规则转发,而是按照 PPPoE 规则转发,具体的过程如下。
首先,如图 ,要发送的包会被加上头部信息,并设置相应的字段。第一个 MAC 头部中,接收方 MAC 地址填写通过 PPPoE 发现机制查询到的BAS 的 MAC 地址,发送方 MAC 地址填写互联网接入路由器的 BAS 端的端口的 MAC 地址,然后以太类型填写代表 PPPoE 的 8864(十六进制)。接下来是 PPPoE 头部和 PPP 头部,它们包含的字段如图所示,其中除了载荷长度之外,其他的值都是可以事先确定的,载荷长度就是需要传输的包的长度。再往后的部分就是包含 IP 头部在内的原始网络包。可以说,这里的转发操作中基本上不需要根据头部中的信息进行判断,只要将事先准备好的头部加上去就可以了。然后,网络包会被转换成信号,从相应的端口发送出去。
3)去头部
接下来
,
网络包会到达
BAS
,
而
BAS
会将
MAC
头部和
PPPoE
头部去掉,
取出
PPP
头部以及后面的部分
,
然后通过隧道机制将包发送出去
。 最后,
PPP
包会沿隧道到达另一端的出口
,
也就是网络运营商的路由器
。
不分配IP地址的无编号端口号
前面介绍了
PPPoE
的工作过程
,
这里面有一个有趣的问题
,
就是互联网接入路由器在发送包的时候为什么要加上那些头部呢?
头部里面的值基本上都是事先定好的,
跟路由表里面的默认网关地址根本没什么关系
。
当采用一对一连接,也就是两台路由器的端口用一根线直接连起来的情况下, 一端发送的包肯定会到达另一端,那么这种情况下就没有必要按照路由表查询默认网关来判断转发目标地址了
。
如果没有必要判断转发地址
,
那么网关的地址也就没什么用了;
如果网关地址没用
,
那么目标路由器的端口也用不着分配 IP
地址了
。
上面的性质对于所有一对一连接都是适用的
。 以前,
即便是在这样的场景中
,
还是会为每个端口分配
IP
地址
,
这是因为有一条规则规定所有的端口都必须具有 IP
地址
。
然而,当公有地址越来越少时,就提出了一个特例,即一对一连接的端口可以不分配 IP 地址。 现在,在这种场景中按惯例都是不为端口分配 IP 地址的 ,这种方式称为无编号(unnumbered)
。
这种情况下
,
BAS
下发配置信息时就不会下发默认网关的 IP
地址。
互联网接入路由器:将私有地址转换为公有地址
前面的介绍里面其实遗漏了一个地方
,
那就是互联网接入路由器在转
发包时需要进行地址转换
。
刚才我们讲过
,
BAS
会向用户端下发 TCP/IP的配置信息,
如果将这些信息配置在计算机上
,
就相当于计算机拥有了公有地址,
这种情况下不需要进行地址转换也可以访问互联网
。
其实 TCP/IP 原本的设计就是这样的。然而,如果使用路由器来上网,BAS 下发的参数就会被配置在路由器上,而且公有地址也是分配给路由器的。
这样一来
, 计算机就没有公有地址了。 这时,
计算机会被分配一个私有地址
,
计算机发送的包需要通过路由器进行地址转换然后再转发到互联网中。
Web
和电子邮件等应用程序不会受到地址转换的影响,
但有些应用程序会因为地址转换无法正常工作
,
这一点需要大家注意。
这是因为有些应用程序需要将自己的
IP
地址告知通信对象或者告知控制服务器,
但在有地址转换的情况下这些操作无法完成
。
遇到应用程序因地址转换无法正常工作的情况时,我们可以不使用路由器,而是直接让计算机接收来自 BAS 的 PPPoE 消息,也就是采用最原始的上网方法
。
这样一来
,
计算机就具有了公有地址
,
不需要地址转换也可以上网了
。
不过,不用路由器上网也有一点需要注意,因为上网的计算机拥有公有地址,这意着来自互联网的包可以直接到达计算机,这可能导致计算机被攻击。因此,对于直接上网的客户端计算机,我们应该采取安装防火
墙软件等防御手段。
网络电话、聊天、对战游戏等需要客户端之间直接收发网络包的应用程序都需要将自己的 IP
地址告知对方。这些应用程序会受到地址转换的影响,但现在已经有很多解决方案,因此不能说这些应用程序全都不能正常工作。对于某个应用程序来说,如果不知道它是否采用了相应的解决方案, 就无法判断它是否会受到地址转换的影响。